# -------------------------------------------------------------------------
# １.	输出100以内所有的正整数，每输出１０个数换行
print('-' * 32)
print('1, 输出100以内所有的正整数，每输出１０个数换行: ')
for i in range(1, 101):
    print(i, end=', ')
    if i > 1 and i % 10 == 0:
        print(flush=True)

# -------------------------------------------------------------------------
# ２.	（1）从键盘输入一个三位数，求出个、十、百位上的数字并输出
# （2）判断这个数是否为水仙花数
# （３）输出所有三位数中的水仙花数
print('-' * 32)


# 函数：求出整数n的第k位
# @param int n 整数n
# @param int k k >= 1, 第k位
# @return int 整数n的第k位
def get_digit(n, k):
    try:
        n = int(n)
    except ValueError:
        return 0
    m = n // (10 ** (k - 1))
    d = m % 10
    return d


# 函数：判断一个数的后3位是否是水仙花数
# @param int n 整数n
# @return bool n的后3位是否是水仙花数
def is_last3digits_sxh_number(n):
    try:
        n = int(n)
    except ValueError:
        return False
    sum = 0
    for i in range(3):
        d = get_digit(n, i + 1)
        sum += d ** 3
    if sum == n:
        return True
    else:
        return False

# （1）从键盘输入一个三位数，求出个、十、百位上的数字并输出
# （2）判断这个数是否为水仙花数
while True:
    try:
        d3 = int(input('2, 从键盘输入一个三位整数:').strip())
    except ValueError:
        print('你输入的不是三位整数，请重新输入。')
        continue
    d3str = str(d3)
    d3len = len(d3str)
    if d3len != 3:
        print('你输入的不是三位整数，请重新输入。')
        continue
    for i, j in enumerate(['个', '十', '百']):
        print(j, '位数字是: ', get_digit(d3, i + 1), sep='')
    # if is_last3digits_sxh_number(d3):
    #     w = '是'
    # else:
    #     w = '不是'
    print(d3, ('是(is)' if is_last3digits_sxh_number(d3) else '不是(isn\'t)'), '水仙花数。', sep='')
    break

# （３）输出所有三位数中的水仙花数
print('所有三位数中的水仙花数:')
print(', '.join([str(x) for x in range(100, 1000) if is_last3digits_sxh_number(x)]))


# -------------------------------------------------------------------------
# ３.	（1）a为变量，用运算符表达出算式a^3-6a^2+11a-6，并赋值给变量b；
# （2）当a＝1~10之间的所有正整数时，判断变量b是否为0；
# （3）使用循环，判断1~10之间的所有正整数，是否可以使a2-5a+6＝0成立，并输出结果；
print('-' * 32)


# （1）a为变量，用运算符表达出算式a^3-6a^2+11a-6，并赋值给变量b
def exp_of_a(a):
    b = a ** 3 - 6 * (a ** 2) + 11 * a - 6
    return b


# （2）当a＝1~10之间的所有正整数时，判断变量b是否为0；
print('3, 当a＝1~10之间的所有正整数时，判断变量b是否为0；')
for i in range(1, 11):
    b = exp_of_a(i)
    # if b == 0:
    #     w = '为'
    # else:
    #     w = '不为'
    print('a=', i, '时, b=', b, ', b', ('为(is)' if 0 == exp_of_a(i) else '不为(is not)'), '0', sep='')

# （3）使用循环，判断1~10之间的所有正整数，是否可以使a2-5a+6＝0成立，并输出结果
print('使用循环，判断1~10之间的所有正整数，是否可以使a2-5a+6＝0成立，并输出结果')
for a in range(1, 11):
    b = 2 * a - 5 * a + 6
    # if b == 0:
    #     w = '成立'
    # else:
    #     w = '不成立'
    print('a=', a, '时, a2-5a+6＝0', ('成立(equals)' if b == 0 else '不成立(does not equal)'), sep='')


# -------------------------------------------------------------------------
# ４.	（1）手动输入两个数，分别放入变量x,y中,y不为0；
# （2）查看x,y的类型，如果不是整形，转换为整形。
# （3）写代码判断x>y,x<y，x==y,并输出判断结果
# （4）写代码计算x+y，x/y,x//y并输出判断结果
# （5）写代码计算x的平方根，y的立方根,x与y的平方和，并输出判断结果。
print('-' * 32)

# （1）手动输入两个数，分别放入变量x,y中,y不为0；
print('4， （1）手动输入两个数，分别放入变量x,y中,y不为0')
x = input('x=?').strip()
while True:
    y = input('y=?').strip()
    if 0 == int(y):
        print('y不能为0，请重新输入')
        continue
    break
print('x=', x, ' y=', y, sep='')


# （2）查看x,y的类型，如果不是整形，转换为整形。
print('（2）查看x,y的类型，如果不是整形，转换为整形。')
print('x的类型：', type(x))
print('y的类型：', type(y))
x = int(x)
y = int(y)
print('转换后：')
print('x的类型：', type(x))
print('y的类型：', type(y))


# （3）写代码判断x>y,x<y，x==y,并输出判断结果
print('（3）写代码判断x>y,x<y，x==y,并输出判断结果')
yes_no = ['假', '真']
print('x>y是', yes_no[int(x > y)], sep='')
print('x<y是', yes_no[int(x < y)], sep='')
print('x==y是', yes_no[int(x == y)], sep='')

# （4）写代码计算x+y，x/y,x//y并输出结果
print('（4）写代码计算x+y，x/y,x//y并输出结果')
print('x + y =', x + y)
print('x / y =', x / y)
print('x // y = ', x // y)

# （5）写代码计算x的平方根，y的立方根,x与y的平方和，并输出判断结果。
print('（5）写代码计算x的平方根，y的立方根,x与y的平方和，并输出判断结果。')
print('x的平方根是', x ** 2, sep='')
print('y的立方根是', y ** 3, sep='')
print('x与y的平方和是', x ** 2 + y ** 2, sep='')


# -------------------------------------------------------------------------
# ５.	（1）定义变量mystr，保存以下内容
# On the East Coast Responsive interactives (between 1320pa-8000pa width November 4.
# (2)全部以大写字母方式和小写字母方式分别输出（５分）
# (3) 挑选并输出所有的大写字母和数字
print('-' * 32)

print('''５.	（1）定义变量mystr，保存以下内容
# On the East Coast Responsive interactives (between 1320pa-8000pa width November 4.''')
mystr = """On the East Coast Responsive interactives (between 1320pa-8000pa width November 4."""

print('(2)全部以大写字母方式和小写字母方式分别输出:')
print(mystr.upper())
print(mystr.lower())

print('(3) 挑选并输出所有的大写字母和数字')
for a in mystr:
    if a.isupper():
        print(a, end=', ')
    elif a.isdigit():
        print(a, end=', ')
print(flush=True)


# -------------------------------------------------------------------------
# ６.	用循环结构，输出图1的等腰三角形“+”阵列
print('-' * 32)
print('６.	用循环结构，输出图1的等腰三角形“+”阵列')
prefix = 3
sign = 1
for i in range(4):
    for j in range(prefix):
        print(' ', end='')
    for j in range(sign):
        print('+', end='')
    print()
    prefix -= 1
    sign += 2



# -------------------------------------------------------------------------
# ７.	用循环结构，输出图2的平行四边形“+”阵列
print('-' * 32)
print('７.	用循环结构，输出图2的平行四边形“+”阵列')
prefix = 4
for i in range(5):
    for j in range(prefix):
        print(' ', end='')
    for j in range(5):
        print('+', end='')
    print()
    prefix -= 1


# -------------------------------------------------------------------------
# ８.	有大中小100匹马，要驮100石货，大马一匹驮3石，中马一匹驮2石，小马一匹驮1石，问大中小马各多少匹？
print('-' * 32)
print('８.	有大中小100匹马，要驮100石货，大马一匹驮3石，中马一匹驮2石，小马一匹驮1石，问大中小马各多少匹？')
for x in range(0, 101):
    for y in range(0, 101 - x):
        z = 100 - x - y
        if 3 * x + 2 * y + z == 100:
            print('大马', x, '匹，中马', y, '匹，小马', z, '匹', sep='')


# -------------------------------------------------------------------------
# ９.	保存如下字符串到变量mstr：
# There are moments in life when you miss someone so much that you just want to pick them from your dreams and hug them for real! Dream what you want to dream;go where you want to go;be what you want to be,because you have only one life and one chance to do all the things you want to do
# 1)	计算mstr字符串长度，并输出。
# 2)	统计字符串中，单词“to”的个数，将结果输出。
# 3)	查找单词‘you' 在字符串中的第一次出现的索引位置，并输出
# 4)	将前2个单词‘you' 替换成中文“你”，其后所有的‘you'替换成“**”并输出
print('-' * 32)
print('''９.	保存如下字符串到变量mstr：
1)	计算mstr字符串长度，并输出。
2)	统计字符串中，单词“to”的个数，将结果输出。
3)	查找单词‘you' 在字符串中的第一次出现的索引位置，并输出
4)	将前2个单词‘you' 替换成中文“你”，其后所有的‘you'替换成“**”并输出
''')
mstr = """\
There are moments in life when you miss someone so much that you just want """"""\
to pick them from your dreams and hug them for real! Dream what you want to """"""\
dream;go where you want to go;be what you want to be,because you have only """"""\
one life and one chance to do all the things you want to do"""
print('mstr字符串长度是', len(mstr))
print('单词“to”的个数是', mstr.count('to'))
print('查找单词‘you\' 在字符串中的第一次出现的索引位置: ', mstr.find('you'))
mstr2 = mstr.replace('you', '你', 2).replace('you', '**')
print('将前2个单词‘you\' 替换成中文“你”，其后所有的‘you\'替换成“**”并输出:')
print(mstr2)


# -------------------------------------------------------------------------
# １０.	输入注册密码，要求密码长度为4-6位，当输入正确时，提示：注册成功；错误提示：密码要求4-6位，请正确输入注册密码
print('-' * 32)
print('１０.	输入注册密码，要求密码长度为4-6位，当输入正确时，提示：注册成功；错误提示：密码要求4-6位，请正确输入注册密码')
while True:
    pwd = input('输入注册密码，要求密码长度为4-6位: ')
    if 4 <= len(pwd) <= 6:
        print('注册成功')
        break
    else:
        print('错误提示：密码要求4-6位，请正确输入注册密码')


# -------------------------------------------------------------------------
# １１.	分别输入你的名字name，年龄age，专业prof，和分数score，使用字符串格式化输出方式实现一个自我介绍。
print('-' * 32)
print('１１.	分别输入你的名字name，年龄age，专业prof，和分数score，使用字符串格式化输出方式实现一个自我介绍。')
name = input('你的名字?: ').strip()
age = int(input('你的年龄?: ').strip())
prof = input('你的专业?: ').strip()
score = float(input('你的分数?: ').strip())
print('''\
自我介绍：
名字：%s
年龄: %d
专业: %s
分数：%f
''' % (name, age, prof, score))
